package com.qg.cyapp.component;

import java.util.ArrayList;
import java.util.List;

import com.qg.cyapp.bean.FoodBean;
import com.qg.cyapp.bean.Item;

/***
 * 购物车Dolly是一个单实例类，只能通过getDolly方法获得购物车， 这也使得在程序的任何一个地方都能很方便的得到同一个购物车对象 并对其进行编辑
 * 
 * @author LKM
 * 
 */
public class Dolly {
	private List<Item> itemList = new ArrayList<Item>();
	private static Dolly dolly = null;

	private Dolly() {
	}

	// 非线程安全,多线程环境需注意
	public static Dolly getDolly() {
		if (null == dolly) {
			dolly = new Dolly();
		}
		return dolly;
	}

	public static boolean isEnpty() {
		return null == dolly ? true : false;
	}

	public Item getItemById(String id) {
		for (Item e : itemList) {
			if (id.equals(e.food.id)) {
				return e;
			}
		}
		return null;
	}

	/*
	 * 
	 * 添加食物到购物车
	 */
	public void addFood(FoodBean food, int num) {

		Item newItem = null;
		for (Item item : itemList) {
			if (item.food.id.equals(food.id)) {
				newItem = item;
				break;
			}
		}
		if (newItem == null) {
			newItem = new Item();
			newItem.food = food;
			newItem.number = num;
			itemList.add(newItem);
		} else {
			newItem.number += num;
		}

	}

	/**
	 * 删除购物车中的某一样食物
	 */
	public void deleteFood(String foodId){
		for (Item item : itemList) {
			if (item.food.id.equals(foodId)) {
				itemList.remove(item);
				break;
			}
		}
	}
	
	/**
	 * 活动最终的一个购物清单，及清除了所有数量为0的项目
	 * 
	 * @return
	 */
	public List<Item> getFinalDolly() {
		for (int i = 0; i < itemList.size(); i++) {
			if (0 == itemList.get(i).number) {
				itemList.remove(i);
			}
		}
		return itemList;
	}

	/**
	 * 获得购物车总价
	 * 
	 * @return
	 */
	public int getTotalPrice() {
		int sum = 0;
		for (Item e : itemList) {
			sum += e.getTotalPrice();
		}
		return sum;
	}

	/**
	 * 获取购物车中菜式总数
	 */
	public int getTotalNumber() {
		int sum = 0;
		for (Item e : itemList) {
			sum += e.number;
		}
		return sum;
	}

	/**
	 * 清空购物车
	 */
	public void clearDolly() {
		this.itemList.removeAll(itemList);
	}

	/**
	 * 销毁购物车，即在内存当中再也找不到购物车了
	 */
	public void destroyDolly() {
		dolly = null;
	}
}
